/**
 * file:   DebugInterceptor.java
 * date:   2014年7月12日
 * author: weiwei
 * desc:   每一个动态代理类都必须要实现InvocationHandler这个接口
 *         当我们通过代理对象调用一个方法的时候，这个方法的调用就会被转发为由InvocationHandler
 *         这个接口的 invoke 方法来进行调用
 */
package designPattern.Proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @author weiwei
 * 
 */
public class DebugInterceptor implements InvocationHandler {
	private Object target;

	public Object getTarget() {
		return target;
	}

	public void setTarget(Object target) {
		this.target = target;
	}

	private void operate(Method m) {
		System.out.println(m.getName() + " start!!!");
	}

	/*
	 * proxy:　　指代我们所代理的那个真实对象 method:　指代的是我们所要调用真实对象的某个方法的Method对象
	 * args:　　指代的是调用真实对象某个方法时接受的参数
	 * 
	 * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object,
	 * java.lang.reflect.Method, java.lang.Object[])
	 */
	// @Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		operate(method);
		method.invoke(target, args);
		return null;
	}

}
